// Дерево отрезков
#include <iostream>
#include<vector>
using namespace std;
int n;
vector<int> *d;
int* a;

 
void build(int v, int l, int r)
{
   if (l==r-1)
      d[v].push_back(a[l]);
   else
   {
      int m=(l+r)/2;
      build(v*2,l,m);
      build(v*2+1,m,r);
      int i=0, j=0;
      while (i<d[v*2].size() && j<d[v*2+1].size())
         if (d[v*2][i]<d[v*2+1][j]) d[v].push_back(d[v*2][i++]);
         else d[v].push_back(d[v*2+1][j++]);
      while (i<d[v*2].size())
         d[v].push_back(d[v*2][i++]);
      while (j<d[v*2+1].size())
         d[v].push_back(d[v*2+1][j++]);
   }
}
 
int lesss(int v, int l, int r, int x)
{
   if (l<r)
   {
      int m=(l+r)/2;
      if (d[v][m]<x) return lesss(v,m+1,r,x);
      return lesss(v,l,m,x);
   }
   else
   {
      return r;
   }
}
 
int ld(int v, int l, int r, int x, int p)
{
   if (p>l)
   {
   if (p>=r)
      return lesss(v,0,d[v].size(),x);
   return ld(v*2,l,(l+r)/2,x,p)+ld(v*2+1,(l+r)/2,r,x,p);
   }
   else return 0;
}
 
int main()
{
   int n;
   cin>>n;
   a=new int[n];
   for (int i=0; i<n; i++)
      cin>>a[i];
   d=new vector<int>[4*n];
   build(1,0,n);
   int k;
   cin>>k;
   for (int i=0; i<k; i++)
   {
      int ind, r;
      cin>>ind>>r;
      ind--;
      cout<<ld(1,0,n,a[ind],((ind+r+1 < n) ? ind+r+1 : n))-ld(1,0,n,a[ind],((ind-r > 0) ? ind-r : 0))<<endl;
   }
 
   return 0;
}